package echat.future.cn.echat.my.api;

import java.util.List;

import echat.future.cn.echat.my.bean.AnchorBean;
import echat.future.cn.echat.my.bean.AuthUserBean;
import echat.future.cn.echat.my.bean.BaseVo;
import echat.future.cn.echat.my.bean.BlackListBean;
import echat.future.cn.echat.my.bean.CollegeBean;
import echat.future.cn.echat.my.bean.ContributionInfo;
import echat.future.cn.echat.my.bean.DividePlanBean;
import echat.future.cn.echat.my.bean.ExpenBean;
import echat.future.cn.echat.my.bean.FansBean;
import echat.future.cn.echat.my.bean.IntimateBean;
import echat.future.cn.echat.my.bean.LabelBean;
import echat.future.cn.echat.my.bean.MyViedio;
import echat.future.cn.echat.my.bean.PlanList;
import echat.future.cn.echat.my.bean.QuestionBean;
import echat.future.cn.echat.my.bean.Token;
import echat.future.cn.echat.my.bean.UserBean;
import echat.future.cn.echat.my.bean.UserProtocolBean;
import echat.future.cn.echat.my.bean.UserStatus;
import echat.future.cn.echat.my.bean.VideoBean;
import echat.future.cn.echat.my.bean.WalletInfo;
import echat.future.cn.echat.my.bean.WithdrawAccount;
import echat.future.cn.echat.my.bean.WithdrawBean;
import echat.future.cn.echat.my.bean.WxPayResult;
import echat.future.cn.echat.my.form.AnotherForm;
import echat.future.cn.echat.my.form.AuthImg;
import echat.future.cn.echat.my.form.SendStatusForm;
import io.reactivex.Observable;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
import retrofit2.http.Query;

public interface UserApi {
    /**
     * 用户注册
     * @param mobile 手机号码
     * @param password 密码 MD5大写之后的验证码
     * @param code 验证码
     * @return
     */
    @POST("/api/user/register")
    Observable<BaseVo<String>> register(@Query("mobile")String mobile,@Query("password")String password,@Query("code")String code,@Query("pid")String pid);


    /**
     * 发送短信
     * @param mobile
     * @return
     */
    @POST("/api/send_sms")
    Observable<BaseVo<String>> sendCode(@Query("mobile")String mobile);


    /**
     * 充值交费密码
     * @param moblie 手机号码
     * @param password 交易密码
     * @return
     */
    @POST("/api/reset_pwd")
    Observable<BaseVo<String>> restPsw(@Query("mobile")String moblie,@Query("password") String password);


    /**
     * 忘记密码第一步，校验密码
     * @param mobile
     * @param code
     * @return
     */
    @POST("/api/forget_pwd_one")
    Observable<BaseVo<String>> checkForgetPass(@Query("mobile")String mobile,@Query("code")String code);

    /**
     * 用户登陆
     * @param mobile
     * @param password
     * @return
     */
    @POST("/api/user/login")
    Observable<BaseVo<Token>> login(@Query("mobile")String mobile,@Query("password")String password);


    /**
     * 获取用户协议
     */
    @GET("/home/getUseragree")
    Observable<BaseVo<List<UserProtocolBean>>> getUserAgree();

    /**
     * 用户分成计划
     */
    @GET("/home/getProportionsInfo")
    Observable<BaseVo<List<DividePlanBean>>> getDividePlane();

    /**
     * 获取用户信息
     * @param token 令牌
     * @return
     */
    @POST("/api/user/anchor_info")
    Observable<BaseVo<UserBean>> getUserInfo(@Query("token") String token,@Query("sign") String sign);


    /**
     * 第三方用户登陆
     * @param openid 唯一标识
     * @param auth_type 1 微信 2QQ
     * @return
     */
    @POST("/api/user/openid_auth")
    Observable<BaseVo<Token>> sencodeLogin(@Query("openid")String openid,@Query("auth_type") int auth_type);


    /**
     * 绑定手机号码
     * @param token token令牌
     * @param mobile 手机号码
     * @param password 密码
     * @param code 验证码
     * @return
     */
    @POST("/api/user/bind_mobile")
    Observable<BaseVo<String>> bindPhone(@Query("token")String token,
                                         @Query("mobile")String mobile,
                                         @Query("password")String password,
                                         @Query("code")String code,
                                         @Query("auth_type") int auth_type,
                                         @Query("openid")String openid);


    /**
     * 获得提现账户
     * @param token
     * @return
     */
    @POST("/api/user/get_withdraw_account")
    Observable<BaseVo<WithdrawAccount>> getWithdrawAccount(@Query("token")String token);


    /***
     * 修改用户提现账户
     * @param token 令牌
     * @param alipay_account 支付宝账户
     * @param alipay_username 支付宝名字
     * @return
     */
    @POST("/api/user/edit_withdraw_account")
    Observable<BaseVo<String>> saveWithdrawAccount(@Query("token")String token,
                                                   @Query("alipay_account")String alipay_account,
                                                   @Query("alipay_username")String alipay_username);

    /**
     * 删除提现账户
     * @param token
     * @return
     */
    @POST("/api/user/del_withdraw_account")
    Observable<BaseVo<String>> deleteWithdrawAccount(@Query("token")String token);


    /**
     * 修改用户信息
     * @param token 标签
     * @param username 用户名
     * @param sign 个性签名
     * @param head 头像
     * @return
     */
    @Multipart
    @POST("/api/user/edit_file")
    Observable<BaseVo<String>> updateUserInfo(@Query("token")String token, @Query("username")String username, @Query("sign")String sign,
                                              @Part MultipartBody.Part head,@Query("height")String height,@Query("weight")String weight,@Query("city")String city,@Query("apperance")String apperance);

    /**
     * 修改用户信息
     * @param token 标签
     * @param username 用户名
     * @param sign 个性签名
     * @param head 头像
     * @return
     */
    @Multipart
    @POST("/api/user/edit_file")
    Observable<BaseVo<String>> updateUserInfo(@Query("token")String token, @Query("username")String username, @Query("sign")String sign,
                                              @Part MultipartBody.Part head);


    /**
     * 我的收入明细
     * @return
     */
    @POST("/api/user/my_income")
    Observable<BaseVo<List<ExpenBean>>> getMyIncome(@Query("token")String token,@Query("page")String page);

    /**
     * 我的支出明细
     * @param token
     */
    @POST("/api/user/my_expend")
    Observable<BaseVo<List<ExpenBean>>> getMyExpendList(@Query("token")String token,@Query("page")int page);


    /**
     * 获取我的提现记录
     * @param token
     * @param page
     * @return
     */
    @POST("/api/user/my_withdraw")
    Observable<BaseVo<List<WithdrawBean>>> getWithrawList(@Query("token")String token, @Query("page")String page);

    /**
     * 获取充值订单号
     * @param  userId 用户id
     * @param money 金额
     */
    @POST("/api/user/aplpay_recharge")
    Observable<BaseVo<String>> getRechargeOrderNum(@Query("member_id")String userId,@Query("money")String money);

    /**
     * 用户提现
     * @param token
     * @param money
     * @return
     */
    @POST("/api/user/withdraw")
    Observable<BaseVo<String>> withdraw(@Query("token")String token,@Query("e_money")String money);


    /**
     * 设置限免
     * @param token token
     * @param isFree 限免开关：【1：限免，0：不限免】
     * @return
     */
    @POST("/api/user/set_free")
    Observable<BaseVo<String>> updateFreeStatus(@Query("token")String token,@Query("is_free")int isFree);


    /**
     * 成为正式用户接口
     * @param token token
     * @param mobile 手机号码
     * @param weChatId 微信号
     * @param files 图片
     * @return
     */
    @POST("/api/user/edit_auth_file")
    Observable<BaseVo<String>> authUser(@Query("token")String token,
                                        @Query("mobile")String mobile,
                                        @Query("wechat_id")String weChatId,
                                        @Query("auth_img")String files
                                        );

    /**
     * 成为正式用户接口
     * @return
     */
    @POST("/api/user/edit_auth_file")
    Observable<BaseVo<String>> authUser2(@Body RequestBody requestBody);


    /**
     * 获得认证用户接口
     * @param token
     * @return
     */
    @POST("/api/user/get_auth_result")
    Observable<BaseVo<AuthUserBean>> getAuthResult(@Query("token")String token);


    /**
     * 认证主播
     * @param token token
     * @param mobile 手机号码
     * @param username 用户名字
     * @param height 身高
     * @param weight 体重
     * @param birth 生日 2019-10-10
     * @param city 所在城市
     * @param job 工作
     * @param apperance 个人形象自评，传以“,”连接的形象id字符串，如：1,2,4
     * @param sign 个性签名
     * @param sex 性别 ：男、女
     * @param imgs 认证图片【以数组格式0，1，2，3多张图片上传】
     * @return
     */
    @POST("/api/user/edit_anchor_auth_file")
    Observable<BaseVo<String>> authZhubo(@Query("token")String token,
                                         @Query("mobile")String mobile,
                                         @Query("username")String username,
                                         @Query("height")String height,
                                         @Query("weight")String weight,
                                         @Query("birth")String birth,
                                         @Query("city")String city,
                                         @Query("job")String job,
                                         @Query("apperance")String apperance,
                                         @Query("sign")String sign,
                                         @Query("sex")String sex,
                                         @Query("auth_img") String imgs
                                         );


    @POST("/api/user/edit_anchor_auth_file")
    Observable<BaseVo<String>> authZhubo2(@Body RequestBody body
    );

    /**
     * 形象标签列表
     * @return
     */
    @POST("/api/user/auth_sign")
    Observable<BaseVo<List<LabelBean>>> getAuthLabe(@Query("token") String token);


    /**
     * 价值申请
     * @return
     */
    @POST("/api/user/price_apply")
    Observable<BaseVo<String>> aplyPrice(@Query("token") String token,@Query("price_apply") int price_apply);


    /**
     * 获取我的小视频
     * @param token
     * @return
     */
    @POST("/api/user/my_video")
    Observable<BaseVo<MyViedio>> getOwnViedio(@Query("token")String token);


    /**
     * 上传我的小视频
     * @param token
     * @return
     */
    @Multipart
    @POST("/api/user/add_video")
    Observable<BaseVo<String>> upLoadMyViedio(@Query("token")String token,
                                              @Query("type")int type,
                                              @Part MultipartBody.Part viedio,
                                              @Part MultipartBody.Part img);

    /**
     * 删除我的小视频
     * @param token
     * @param id
     * @return
     */
    @POST("/api/user/del_video")
    Observable<BaseVo<String>> deleteVideo(@Query("token")String token,@Query("id") int id);


    /**
     * 我的艺术照
     * @param token
     * @return
     */
    @POST("/api/user/my_img")
    Observable<BaseVo<List<VideoBean>>> getMyPic(@Query("token")String token);

    /**
     * 上传我的艺术照
     * @param token
     * @param img
     * @return
     */
    @Multipart
    @POST("/api/user/add_img")
    Observable<BaseVo<String>> uploadMyPic(@Query("token")String token,@Part MultipartBody.Part img);


    /**
     * 删除我的艺术照
     * @param token
     * @param id
     * @return
     */
    @POST("/api/user/del_img")
    Observable<BaseVo<String>> deletePic(@Query("token")String token,@Query("id") int id);


    /**
     * 亲密榜
     * @param token
     * @param member_id
     * @return
     */
    @POST("/api/user/close_list")
    Observable<BaseVo<List<IntimateBean>>> getIntimateBeans(@Query("token")String token,@Query("member_id")String member_id);

    /**
     * 我的粉丝
     */
    @POST("/api/user/anchor_fans")
    Observable<BaseVo<List<FansBean>>> getMyFans(@Query("token")String token);


    /**
     * 将粉丝加入黑名单
     * @param token
     * @param fans_id
     * @return
     */
    @POST("/api/user/del_fans")
    Observable<BaseVo<String>> addBlackList(@Query("token")String token,@Query("fans_id") int fans_id);


    /**
     * 黑名单列表
     * @param token
     * @param page
     * @return
     */
    @POST("/api/user/get_user_blacks")
    Observable<BaseVo<List<BlackListBean>>> balckList(@Query("token")String token, @Query("page")int page);


    /**
     * 删除黑名单列表
     * @param token
     * @param id
     * @return
     */
    @POST("/api/user/move_black")
    Observable<String> removeBlackList(@Query("token")String token,@Query("black_id")int id);


    /**
     * 获得收藏对象
     * @param token
     * @return
     */
    @POST("/api/user/like_anchor_list")
    Observable<BaseVo<List<CollegeBean>>> getCollege(@Query("token")String token,@Query("page")String page);

    /**
     *
     * @param
     * @return
     */
    @Multipart
    @POST("/home/addproblem")
    Observable<BaseVo<String>> addproblem(@Part("uid") RequestBody uid, @Part("con")RequestBody con, @Part("phone")RequestBody phone);


    /**
     * 獲取問題詳情
     * @param type
     * @return
     */
    @GET("/home/getnoinfophone")
    Observable<BaseVo<List<QuestionBean>>> getnoinfophone(@Query("type")String type);


    /**
     * 獲得主播
     * @param member_id
     * @return
     */
    @POST("/api/get_anchor_status")
    Observable<BaseVo<UserStatus>> getAnchorStatusd(@Query("member_id")String member_id);

    /**
     * 傳遞主播狀態
     */
    @Multipart
    @POST("/api/send_anchor_status")
    Observable<BaseVo<String>> sendAnchorSstatus(@Part("member_id")RequestBody member_id,@Part("status")RequestBody status);


    /**
     * 分成計劃
     * @return
     */
    @POST("/api/user/plan_list")
    Observable<BaseVo<PlanList>> planList(@Query("token")String token, @Query("page")String page);


    @POST("/api/user/user_assets")
    Observable<BaseVo<WalletInfo>> getMoney(@Query("token")String token);

    /**
     * 获取对象
     * @param token
     * @param page
     * @return
     */
    @Multipart
    @POST("api/user/getUserContribution")
    Observable<BaseVo<ContributionInfo>> getUserContribution(@Part("token") RequestBody token,@Part("page") RequestBody page);


    /**
     * 获取单个主播
     * @param token
     * @param member_id
     * @return
     */
    @POST("api/user/get_one_anchor")
    Observable<BaseVo<AnchorBean>> getOneAnchor(@Query("token")String token, @Query("member_id")String member_id);


    @GET("api/user/wx_recharge")
    Observable<BaseVo<WxPayResult>> wxRechage(@Query("member_id")String member_id,@Query("money")String money);

    /**
     * 微信支付文档
     * @param out_trade_no
     * @return
     */
    @GET("api/wx_result")
    Observable<BaseVo<String>> wxResult(@Query("out_trade_no")String out_trade_no);

    /**
     * 关注 取消关注主播
     * @param token
     * @param member_id
     * @param type  1：关注（喜欢）；2：不喜欢；3：取消关注
     * @return
     */
    @POST("/api/user/ope_fans")
    Observable<BaseVo<String>> openFanse(@Query("token") String token,
                                         @Query("member_id") String member_id,
                                         @Query("type") String type);
}
